package org.zjt.design.pattern;

import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Objects;

/**
 * @author <a href="juntao.zhang@qq.com">juntao.zhang</a>
 * @Description: 对一些对象缓存，来保证一个bean共享，类似IOC。
 * @Package org.zjt.design.pattern
 * @date 2018/5/8 18:28
 *
 *  使用场景：
        ● 系统中存在大量的相似对象。
        ● 细粒度的对象都具备较接近的外部状态，而且内部状态与环境无关，也就是说对象没有特定身份。
        ● 需要缓冲池的场景。
 */
@Slf4j
public class FlyweightTest {


    public static void main(String[] args) {

        log.info(""+ FlyweightFactory.getFlyweight("22222"));
        log.info(""+ FlyweightFactory.getFlyweight("22222"));
    }
}


class FlyweightFactory {

    //定义一个池容器
    private static HashMap<String,Integer> pool= new HashMap<String,Integer>();

    //享元工厂
    public static Integer getFlyweight(String Extrinsic){
        pool.compute(Extrinsic, (s, integer) -> Objects.isNull(integer) ? 1 : ++integer);
        return pool.get(Extrinsic);
    }
}